# cookies_util.py

import os
import tempfile
from http.cookiejar import MozillaCookieJar

import psutil
from PyQt5.QtCore import QThread, pyqtSignal
from yt_dlp.cookies import extract_cookies_from_browser




class CookieCopyThread(QThread):
    copy_result = pyqtSignal(bool, str)
    def run(self) -> None:
        if self.extract_youtube_cookies_to_txt():
            print("Cookies 导出成功，可以开始使用 yt-dlp 下载受限视频")
            self.copy_result.emit(True, 'Cookies 导出成功')
        else:
            print("Cookies 导出失败，请检查 Chrome 是否安装并已登录 YouTube")
            self.copy_result.emit(False, 'Cookies 导出失败')

    def extract_youtube_cookies_to_txt(self, output_path='cookies.txt'):
        """
        将 Chrome 的 YouTube cookies 导出为 cookies.txt 格式，兼容 yt-dlp。
        仅导出非登录状态下的 cookies，排除身份认证相关字段。
        """
        try:
            # 从 Chrome 提取 Cookies（默认 profile）
            all_cookies = extract_cookies_from_browser('chrome')
            youtube_domains = ['youtube.com', '.youtube.com', 'm.youtube.com', '.m.youtube.com']
            auth_cookie_names = {
                'SAPISID', 'SID', 'SSID', 'HSID', 'APISID', 'LOGIN_INFO',
                'ACCOUNT_CHOOSER', 'SIDCC', 'SSID', 'SID', 'LSID'
            }

            # 只保留 YouTube 域名下的非登录认证 cookies
            yt_cookies = [
                c for c in all_cookies
                if any(domain in c.domain for domain in youtube_domains)
                   and c.name not in auth_cookie_names
            ]

            if not yt_cookies:
                print('[!] 未找到非登录的 YouTube Cookies')
                return False

            # 保存为 cookies.txt (Netscape 格式)
            cookiejar = MozillaCookieJar(output_path)
            for cookie in yt_cookies:
                cookiejar.set_cookie(cookie)
            cookiejar.save(ignore_discard=True, ignore_expires=True)

            print(f'[✓] 成功导出非登录 Cookies 到 {output_path}')
            return True

        except Exception as e:
            print(f'[×] 导出 Cookies 失败: {e}')
            return False